Presto হল একটি SQL ভিত্তিক ডিস্ট্রিবিউটেড কোয়েরি ইঞ্জিন, এবং এটি বড় ডেটাসেটের জন্য বিভিন্ন ধরনের SQL অপারেশন করতে সক্ষম। এই টিউটোরিয়ালে আমরা দেখবো কীভাবে Presto তে Joins, Filters, এবং Aggregation ব্যবহার করা যায়।
১. Joins ব্যবহার
Presto তে Joins ব্যবহার করে একাধিক টেবিলের ডেটা একত্র করা যায়। Presto সমস্ত স্ট্যান্ডার্ড SQL Join অপারেশন সাপোর্ট করে, যেমন INNER JOIN, LEFT JOIN, RIGHT JOIN, এবং FULL JOIN। নিচে কিছু উদাহরণ দেওয়া হলো:
INNER JOIN
INNER JOIN টেবিলগুলোর মিলিত রেকর্ডগুলো দেখায় যেখানে দুটি টেবিলের মধ্যে সম্পর্ক রয়েছে।
উদাহরণ:
SELECT orders.order_id, customers.customer_name
FROM orders
INNER JOIN customers
ON orders.customer_id = customers.customer_id;
এই কোয়েরিটি orders এবং customers টেবিলের মধ্যে customer_id এর মাধ্যমে মিলে যাওয়া রেকর্ডগুলো নির্বাচন করবে।
LEFT JOIN
LEFT JOIN বা LEFT OUTER JOIN টেবিলের বাম পাশে থাকা টেবিলের সব রেকর্ড সহ, ডান পাশের টেবিলের মিলিত রেকর্ডগুলো দেখায়।
উদাহরণ:
SELECT customers.customer_name, orders.order_id
FROM customers
LEFT JOIN orders
ON customers.customer_id = orders.customer_id;
এই কোয়েরিটি customers টেবিলের সব রেকর্ড এবং মেলে এমন orders রেকর্ডগুলো দেখাবে। যদি কোন customer_id এর সাথে মিল না থাকে, তবে order_id এর মান NULL হবে।
RIGHT JOIN
RIGHT JOIN হল LEFT JOIN এর বিপরীত, যেখানে ডান পাশে থাকা টেবিলের সব রেকর্ড দেখানো হয়।
উদাহরণ:
SELECT orders.order_id, customers.customer_name
FROM orders
RIGHT JOIN customers
ON orders.customer_id = customers.customer_id;
এটি orders টেবিলের সব রেকর্ড এবং মেলে এমন customers রেকর্ডগুলো দেখাবে।
FULL OUTER JOIN
FULL OUTER JOIN টেবিলের উভয় পাশের সমস্ত রেকর্ড দেখায়, এবং যেখানেই মেলানো যাবে না, সেখানেই NULL দেখাবে।
উদাহরণ:
SELECT orders.order_id, customers.customer_name
FROM orders
FULL OUTER JOIN customers
ON orders.customer_id = customers.customer_id;
এটি orders এবং customers টেবিলের সমস্ত রেকর্ড দেখাবে, যেখানে মেলানো যায় না, সেখানে NULL দেখানো হবে।
২. Filters ব্যবহার
Presto তে Filters ব্যবহার করে আপনি নির্দিষ্ট শর্ত অনুসারে ডেটা ফিল্টার করতে পারেন। SQL তে WHERE ক্লজ ব্যবহার করে ফিল্টারিং করা হয়।
উদাহরণ:
SELECT order_id, customer_name, order_date
FROM orders
WHERE order_date > '2023-01-01'
AND total_amount > 100;
এই কোয়েরিটি orders টেবিল থেকে এমন সমস্ত অর্ডার বের করবে যার order_date ২০২৩ সালের ১ জানুয়ারি বা তার পরের এবং total_amount ১০০ এর বেশি।
LIKE Filter
LIKE ফিল্টার ব্যবহার করে প্যাটার্ন মিলিয়ে ডেটা ফিল্টার করা যায়।
উদাহরণ:
SELECT customer_name, email
FROM customers
WHERE email LIKE '%@gmail.com';
এটি সমস্ত customers টেবিলের রেকর্ড ফিরিয়ে দেবে, যাদের ইমেইল ঠিকানায় @gmail.com থাকবে।
IN Filter
IN ফিল্টার ব্যবহার করে একাধিক মানের মধ্যে ডেটা খোঁজা যায়।
উদাহরণ:
SELECT order_id, order_date
FROM orders
WHERE order_id IN (1, 2, 3, 5);
এটি orders টেবিল থেকে সেই রেকর্ডগুলো ফিরিয়ে দেবে যেগুলোর order_id ১, ২, ৩, অথবা ৫।
৩. Aggregation ব্যবহার
Presto তে Aggregation ব্যবহার করে ডেটার উপর বিভিন্ন গণনা করা যায়, যেমন মোট, গড়, মিনিমাম, ম্যাক্সিমাম ইত্যাদি। GROUP BY এবং HAVING ক্লজগুলি Aggregation অপারেশনের সাথে ব্যবহৃত হয়।
SUM()
SUM() ফাংশন মোট মান বের করতে ব্যবহৃত হয়।
উদাহরণ:
SELECT customer_id, SUM(total_amount) AS total_spent
FROM orders
GROUP BY customer_id;
এই কোয়েরিটি orders টেবিল থেকে প্রতিটি customer_id এর জন্য মোট খরচ (sum) বের করবে।
AVG()
AVG() ফাংশন গড় বের করতে ব্যবহৃত হয়।
উদাহরণ:
SELECT AVG(total_amount) AS average_order_value
FROM orders;
এই কোয়েরিটি সমস্ত অর্ডারের গড় মান বের করবে।
COUNT()
COUNT() ফাংশন রেকর্ডের সংখ্যা গননা করতে ব্যবহৃত হয়।
উদাহরণ:
SELECT customer_id, COUNT(order_id) AS total_orders
FROM orders
GROUP BY customer_id;
এই কোয়েরিটি প্রতিটি customer_id এর জন্য মোট অর্ডারের সংখ্যা বের করবে।
MAX() এবং MIN()
MAX() এবং MIN() ফাংশন যথাক্রমে সর্বোচ্চ এবং সর্বনিম্ন মান বের করতে ব্যবহৃত হয়।
উদাহরণ:
SELECT MAX(total_amount) AS max_order_value, MIN(total_amount) AS min_order_value
FROM orders;
এই কোয়েরিটি সমস্ত অর্ডারের মধ্যে সর্বোচ্চ এবং সর্বনিম্ন অর্ডারের মূল্য বের করবে।
GROUP BY এবং HAVING
GROUP BY ডেটাকে একটি নির্দিষ্ট কলামের উপর ভিত্তি করে গ্রুপ করে এবং HAVING শর্ত নির্ধারণের জন্য ব্যবহৃত হয় (যা WHERE এর মতো, তবে এটি গ্রুপড ডেটার জন্য ব্যবহার হয়)।
উদাহরণ:
SELECT customer_id, SUM(total_amount) AS total_spent
FROM orders
GROUP BY customer_id
HAVING SUM(total_amount) > 500;
এই কোয়েরিটি সেই customer_id গুলির জন্য মোট খরচ বের করবে যাদের খরচ ৫০০ এর বেশি।
সারাংশ
- Joins: একাধিক টেবিলের মধ্যে সম্পর্ক তৈরি করে ডেটা একত্র করতে ব্যবহৃত হয়।
- Filters: ডেটা ফিল্টার করার জন্য ব্যবহৃত হয়, যেমন WHERE, LIKE, IN।
- Aggregation: ডেটার উপর গণনা করতে ব্যবহৃত হয়, যেমন SUM, AVG, COUNT, MAX, এবং MIN।
Presto তে এই অপারেশনগুলি ব্যবহার করে আপনি বড় ডেটাসেটের উপর দ্রুত এবং কার্যকরীভাবে বিভিন্ন ধরনের বিশ্লেষণ করতে পারেন।
Read more